package com.thinkerwu.learn.core.validator;


import com.thinkerwu.learn.core.utils.EnumUtil;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
 * 注解@EnumInspect的校验器，校验值是属于枚举类
 *
 * @author Thinker Wu
 * @date 2018年10月20日-16时00分
 */
public class EnumInspectValidator implements ConstraintValidator<EnumInspect, Object> {

    private EnumInspect enumInspect;

    @Override
    public void initialize(EnumInspect enumInspect) {
        this.enumInspect = enumInspect;
    }

    /**
     * 异常直接抛出去
     *
     * @param value
     * @param constraintValidatorContext
     * @return
     */
    @Override
    public boolean isValid(Object value, ConstraintValidatorContext constraintValidatorContext) {

        /**
         * 先判断值是否必须
         * 1、如果值必须，而值为空，则直接抛出异常。
         *                  值非空，则枚举匹配验证
         *2、如果值不必须，值空，则通过
         *                  非空，则匹配枚举
         */

        if (value != null) {
            try {
                if (!EnumUtil.match(enumInspect.enumClass(), Integer.parseInt(value.toString()))) {
                    return false;
                }
            } catch (Exception e) {
                return false;
            }
        }

        if (enumInspect.required() && value != null) {
            return true;
        }
        if (!enumInspect.required()) {
            return true;
        }
        return false;
    }
}